package com.xuecheng.content.task;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xuecheng.content.entity.CoursePubMsg;
import com.xuecheng.content.service.CoursePubMsgService;
import com.xuecheng.content.service.CoursePubService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.List;
/**
 * <p></p>
 *
 * @Description:
 */
@Slf4j
@Component
public class CoursePublishTask {
    @Autowired
    private CoursePubMsgService coursePubMsgService;
    @Autowired
    private CoursePubService coursePubService;
    /* 执行时间频率：时间（毫秒） */
    // @Scheduled(fixedRate = 3000l)
    /*
    * cron
    *   Spring-task一共是6位
    *       3 * * * * ?  每一天的每一小时的每一分钟的第三秒会执行
    *       3 * 12 * * ? 每一天的12点的每一分钟的第三秒会执行
    *       3,12,20,28 * 12 * * ? 每一天的12点的每一分钟的第三秒、第十二秒....会执行
    *       3-28 * 12 * * ? 每一天的12点的每一分钟的第三秒、第十二秒....会执行
    *       10/5 * 12 ? * 3 每一天的12点的每一分钟
    *       冲突：
    *           第四位和第六位是冲突的
    *       当前场景下服务为了同步课程发布数据内容
    *           每隔5-10秒执行
    * */
    @Scheduled(cron = "0/10 * * * * ?")
    public void testTask() {
        log.info("定时任务执行操作-重新发送消息");
        // 1.查询发布消息表中pubStatus为0的数据
        LambdaQueryWrapper<CoursePubMsg> msgLambdaQueryWrapper = new LambdaQueryWrapper<>();
        msgLambdaQueryWrapper.eq(CoursePubMsg::getPubStatus, CoursePubMsg.UNSENT);
        List<CoursePubMsg> coursePubMsgs = coursePubMsgService.list(msgLambdaQueryWrapper);

        // 2.如果list数据存在，需要将数据一条一条发送到mq中
        if (!(CollectionUtils.isEmpty(coursePubMsgs))) {

            for (CoursePubMsg coursePubMsg : coursePubMsgs) {

                Long courseId = coursePubMsg.getCourseId();
                Long companyId = coursePubMsg.getCompanyId();

                coursePubService.publish(courseId, companyId,true);
            }

        }
    }
}